/** @jsxImportSource @emotion/react */
import * as React from "react";
import {
   CCell, Table, TableBody, TableRow, Text, Cell, TableHead,
} from "customize-easy-ui-component";
import { DirectLink, } from "../../../routing/Link";
import {multilines2Html} from "../../tools";
import {eqpTypeAllMap} from "../../../dict/eqpComm";
import {config观测数据, } from "./orcBase";
import {CCellUnit, twoForkSelect} from "../../common/base";
import {useMeasureTable} from "../../hook/useMeasure";
import {检验编制核准Gant} from "../rarelyVary";


//对比的：<RouterLink 可以导航文本处鼠标和点过链接颜色变但是表格鼠标不变，不能放在表格内。 改<DirectLink的。
export const 测量结果记录= ({ orc, rep,label } : { orc: any, rep: any,label:string}
) => {
  const renderMeasure=useMeasureTable({rep,orc, config: config观测数据});
  return <>
      <Text variant="h4" css={{marginTop: '1rem',
      }}>{label}</Text>
      <Table fixed={ ["3%","8%","13%","%","20%","5%","10%","8%","6%"] }  css={ {borderCollapse: 'collapse' } } tight  miniw={800}>
        <TableHead>
          <TableRow>
            <CCell><Text css={{fontSize:'0.8rem'}}>序号</Text></CCell><CCell><Text css={{fontSize:'0.7rem'}}>项目编号</Text></CCell><CCell colSpan={3}>检验内容与要求</CCell>
            <CCell>单位</CCell><CCell>观测数据</CCell><CCell>测量结果</CCell><CCell><Text css={{fontSize:'0.8rem'}}>结果判定</Text></CCell>
          </TableRow>
        </TableHead>
        <TableBody>
          <DirectLink  href={`/report/${rep?.modeltype}/ver/${rep?.modelversion}/${rep?.id}/Measure#Measure`}>
            {renderMeasure}
            <TableRow>
              <CCell>备注</CCell>
              <Cell colSpan={8}>{multilines2Html(orc?.观测备注,  (txt,i)=>{
                return <React.Fragment key={i}>{(i!==0)&&<br/>}<Text>{txt}</Text></React.Fragment>
              })}</Cell>
            </TableRow>
          </DirectLink>
        </TableBody>
      </Table>
    注：1、未测量或无需测量的，仅填检验结果栏。
    2、其他需记录的测量值和结果值填在备注栏中。
    3、对有多个起升机构的设备，C3.8.1记录主起升机构，其余起升机构记录在备注栏中。
    4、分别抽查主回路、控制回路、电气设备的相间绝缘电阻和对地绝缘电阻，记录其中的最小值。
  </>;
};

/**格式化检验记录：【特殊表现的表格】表格行列倒置布局形式的;
 * */
export const 现场检验= ( { orc, rep } : { orc: any, rep: any}
) => {
  const recNums=orc?.检验条件?.length;
  const blocks=Math.ceil(recNums/5) || 1;     //倒转的，每5行的一块块布局:固定的5个日期汇集打印的一行。
  return <>
    <Table fixed={ ["3.5%","%","11%","11%","11%","11%","11%"] }  css={ {borderCollapse: 'collapse' } } tight  miniw={800}>
      <TableHead>
        <TableRow>
          <CCell colSpan={2}>现场检验条件</CCell>
          <CCell>确认结果</CCell><CCell>确认结果</CCell><CCell>确认结果</CCell><CCell>确认结果</CCell><CCell>确认结果</CCell>
        </TableRow>
      </TableHead>
      <TableBody>
      {(new Array(blocks)).fill(null).map((_, b:number) => {
        // const dateE=orc?.检验条件?.[b];    //某一次的
        const condit1=[] as any, condit2=[] as any, dates=[] as any;
        (new Array(5)).fill(null).forEach((_, d:number) => {
          if(b*5 +d>=recNums){
            condit1.push(<CCell key={b*5 +d}></CCell>);
            condit2.push(<CCell key={b*5 +d}></CCell>);
            dates.push(<CCell key={b*5 +d}></CCell>);
          }
          else{
            const row=orc?.检验条件?.[b*5 +d];
            condit1.push(<CCell key={b*5 +d}>{twoForkSelect(row?.x)}</CCell>);
            condit2.push(<CCell key={b*5 +d}>{twoForkSelect(row?.y)}</CCell>);
            dates.push(<CCell key={b*5 +d}>{row?.d}</CCell>);
          }
        });
        return <DirectLink key={b} href={`/report/${rep?.modeltype}/ver/${rep?.modelversion}/${rep?.id}/SiteCondition#SiteCondition`}>
                <TableRow>
                  <CCell>1</CCell><Cell>试验的动力源、环境温度、海拔高度、风速符合标准和设计要求。</Cell>
                  {condit1}
                </TableRow>
                <TableRow>
                  <CCell>2</CCell><Cell>检验现场不得有易燃、易爆以及腐蚀性气体。</Cell>
                  {condit2}
                </TableRow>
                <TableRow>
                  <CCell colSpan={2}>确认时间</CCell>
                  {dates}
                </TableRow>
            </DirectLink>;
      }) }
      </TableBody>
    </Table>;
    注：每次到现场后，在检验前应对检验条件进行确认，只有确认所有与检验相关的条件满足检验要求时，才能开始开展检验工作。
  </>;
};


/**正式报告用的
 * */
export const 报告设备详情= ( { orc, rep } : { orc: any,rep:any}
) => {
  return <React.Fragment>
    <Table id={'Survey'} fixed={ ["6%","10%","30%","18%","%"] }  css={ {borderCollapse: 'collapse' } }  tight  miniw={800}>
      <TableBody>
        <DirectLink href={`/report/${rep?.modeltype}/ver/${rep?.modelversion}/${rep?.id}/Survey#Survey`}>
          <TableRow>
            <CCell colSpan={2}>使用单位</CCell>
            <CCell colSpan={3}>{orc.使用单位 || '／'}</CCell>
          </TableRow>
          <TableRow>
            <CCell colSpan={2}>使用单位地址</CCell>
            <CCell colSpan={3}>{orc.使用单位地址 || '／'}</CCell>
          </TableRow>
          <TableRow>
            <CCell colSpan={2}>使用单位统一社会信用代码</CCell><CCell>{orc.使用单位信用码 || '／'}</CCell>
            <CCell>使用单位安全管理人员</CCell><CCell>{orc.安管人员 || '／'}</CCell>
          </TableRow>
          <TableRow>
            <CCell colSpan={2}>联系电话</CCell><CCell>{orc.使用单位电话 || '／'}</CCell>
            <CCell>邮政编码</CCell><CCell>{orc.使用单位邮编 || '／'}</CCell>
          </TableRow>
          <TableRow>
            <CCell colSpan={2}>制造单位</CCell>
            <CCell colSpan={3}>{orc.制造单位 || '／'}</CCell>
          </TableRow>
          <TableRow>
            <CCell colSpan={2}>改造单位</CCell>
            <CCell colSpan={3}>{orc.改造单位 || '／'}</CCell>
          </TableRow>
          <TableRow>
            <CCell colSpan={2}>重大修理单位</CCell>
            <CCell colSpan={3}>{orc.维修单位 || '／'}</CCell>
          </TableRow>
          <TableRow>
            <CCell colSpan={2}>设备类别</CCell><CCell>{eqpTypeAllMap.get(orc.设备类别)}</CCell>
            <CCell>设备品种</CCell><CCell>{eqpTypeAllMap.get(orc.设备品种)}</CCell>
          </TableRow>
          <TableRow>
            <CCell colSpan={2}>型号规格</CCell><CCell>{orc.型号 || '／'}</CCell>
            <CCell>设备代码</CCell><CCell>{orc.设备代码 || '／'}</CCell>
          </TableRow>
          <TableRow>
            <CCell colSpan={2}>产品编号</CCell><CCell>{orc.出厂编号 || '／'}</CCell>
            <CCell>单位内编号</CCell><CCell>{orc.单位内部编号 || '／'}</CCell>
          </TableRow>
          <TableRow>
            <CCell colSpan={2}>投入使用日期</CCell><CCell>{orc.投用日期 || '／'}</CCell>
            <CCell>设计使用年限</CCell>
            <CCellUnit unit={'年'}>{orc.设计年限 || '／'}</CCellUnit>
          </TableRow>
          <TableRow>
            <CCell colSpan={2}>制造日期</CCell><CCell>{orc.制造日期 || '／'}</CCell>
            <CCell></CCell><CCell></CCell>
          </TableRow>
          <TableRow >
            <CCell colSpan={2}>使用地点</CCell>
            <CCell colSpan={3}>{orc.设备使用地点 || '／'}</CCell>
          </TableRow>
        </DirectLink>
      </TableBody>
    </Table>
    <Table fixed={ ["3.5%","13%","33%","13%","%"] }  css={ {borderCollapse: 'collapse' } }  tight  miniw={800}>
      <TableBody>
        <TableRow >
          <CCell rowSpan={4}>性能参数</CCell>
          <CCell>额定起重量</CCell>
          <CCellUnit unit={'t'}>{orc.额定载荷 || '／'}</CCellUnit>
          <CCell>额定起重力矩</CCell>
          <CCellUnit unit={'t·m'}>{orc.起重力矩 || '／'}</CCellUnit>
        </TableRow>
        <TableRow>
          <CCell>起升高度</CCell>
          <CCellUnit unit={'m'}>{orc.起升高度 || '／'}</CCellUnit>
          <CCell>起升速度</CCell>
          <CCellUnit unit={'m/min'}>{orc.起升速 || '／'}</CCellUnit>
        </TableRow>
        <TableRow>
          <CCell>起重机械运行速度</CCell>
          <CCellUnit unit={'m/min'}>{orc.速度 || '／'}</CCellUnit>
          <CCell>工作级别</CCell><CCell>{orc.工作级别 || '／'}</CCell>
        </TableRow>
        <TableRow>
          <CCell>其他主要参数</CCell>
          <Cell colSpan={3}>{multilines2Html(orc?.其他参数,  (txt,i)=>{
            return <React.Fragment key={i}>{(i!==0)&&<br/>}<Text>{txt}</Text></React.Fragment>
           })}</Cell>
        </TableRow>
        <TableRow>
          <CCell colSpan={2}>检验依据</CCell><Cell colSpan={3}>
          《起重机械安全技术规程》（TSG 51-2023）
        </Cell>
        </TableRow>
        <DirectLink href={`/report/${rep?.modeltype}/ver/${rep?.modelversion}/${rep?.id}/Conclusion#Conclusion`}>
          <TableRow>
            <CCell>检验结论</CCell><CCell colSpan={4}><Text variant="h1" css={{fontSize:'4rem'}}>{orc?.检验结论}</Text></CCell>
          </TableRow>
        </DirectLink>
        <DirectLink href={`/report/${rep?.modeltype}/ver/${rep?.modelversion}/${rep?.id}/Survey#Survey`}>
          <TableRow>
            <CCell>备注</CCell>
            <Cell colSpan={4}>{multilines2Html(orc?.概备注,  (txt,i)=>{
              return <React.Fragment key={i}>{(i!==0)&&<br/>}<Text>{txt}</Text></React.Fragment>
            })}</Cell>
          </TableRow>
        </DirectLink>
      </TableBody>
    </Table>

    {检验编制核准Gant({orc,rep})}
  </React.Fragment>;
};

/**正规jsx组件的用法需改成英文的。
 * 报错：Imported JSX component Moni监控管理系统 must be in PascalCase or SCREAMING_SNAKE_CASE ；<tag></tag>带儿子的组件名字不能用中文的。
 * */
export const MonitoringManageSystem= ({ orc, rep, label,children } : { orc: any,rep: any,label: string,children: React.ReactNode;}
) => {
  return <>
    <Text variant="h4" css={{marginTop: '1rem',
    }}>{label}</Text>
    <Table fixed={ ["3.5%","28%","13%","%","10%","5%","10%","8%","6%"] }  css={ {borderCollapse: 'collapse' } } tight  miniw={800}>
      <TableHead>
        <TableRow>
          <CCell>序号</CCell>
          <CCell>项目编号</CCell>
          <CCell>次数(类别）</CCell>
          <CCell colSpan={2}>显示屏数值</CCell>
          <CCell colSpan={2}>测量值</CCell>
          <CCell colSpan={2}>计算值</CCell>
          <CCell>检验结果</CCell>
        </TableRow>
      </TableHead>
      <TableBody>
        <DirectLink  href={`/report/${rep?.modeltype}/ver/${rep?.modelversion}/${rep?.id}/Monitoring#Monitoring`}>
          <TableRow>
            <CCell rowSpan={4}>1</CCell>
            <CCell rowSpan={4}>C4.2.2.5.1.1 起升高度（m)</CCell>
            <CCell>/</CCell>
            <CCell>H1</CCell>
            <CCell>H2</CCell>
            <CCell>h1</CCell>
            <CCell>h2</CCell>
            <CCell>H</CCell>
            <CCell>h</CCell>
            <CCell rowSpan={4}>{orc.起高表r}</CCell>
          </TableRow>
          { (new Array(3)).fill(null).map(( _,  r:number) => {
            const o=orc.起高表?.[r];
            return  <TableRow key={r}>
              <CCell>{r+1}次</CCell>
              <CCell>{o?.H1}</CCell>
              <CCell>{o?.H2}</CCell>
              <CCell>{o?.h1}</CCell>
              <CCell>{o?.h2}</CCell>
              <CCell>{o?.H}</CCell>
              <CCell>{o?.h}</CCell>
            </TableRow>;
          }) }
          <TableRow>
            <CCell rowSpan={3}>2</CCell>
            <CCell rowSpan={3}>C4.2.2.5.1.2 运行行程（m)</CCell>
            <CCell>/</CCell>
            <CCell>S1</CCell>
            <CCell>S2</CCell>
            <CCell colSpan={2}>s</CCell>
            <CCell>S</CCell>
            <CCell>/</CCell>
            <CCell rowSpan={3}>{orc.行程表r}</CCell>
          </TableRow>
          { ['(1)小车','(2)大车'].map(( group,  r:number) => {
            const o=orc.行程表?.[r];
            return  <TableRow key={r}>
              <CCell>{group}</CCell>
              <CCell>{o?.S1}</CCell>
              <CCell>{o?.S2}</CCell>
              <CCell colSpan={2}>{o?.s}</CCell>
              <CCell>{o?.S}</CCell>
              <CCell>/</CCell>
            </TableRow>;
          }) }
          { ['1次（R0.3）','2次（R0.6）','3次（R0.9）'].map(( group,  r:number) => {
            const o=orc.幅度表?.[r];
            return  <TableRow key={r}>
              {0===r && <>
                <CCell rowSpan={3}>3</CCell>
                <CCell rowSpan={3}>C4.2.2.5.1.3 幅度（m）</CCell>
              </>}
              <CCell>{group}</CCell>
              <CCell colSpan={2}>{o?.d}</CCell>
              <CCell colSpan={2}>{o?.m}</CCell>
              <CCell colSpan={2}>{o?.c}</CCell>
              {0===r && <>
                <CCell rowSpan={3}>{orc.幅度表r}</CCell>
              </>}
            </TableRow>;
          }) }
          { ['1次','2次','3次'].map(( group,  r:number) => {
            const o=orc.回转表?.[r];
            return  <TableRow key={r}>
              {0===r && <>
                <CCell rowSpan={3}>4</CCell>
                <CCell rowSpan={3}>C4.2.2.5.1.6 回转角度（°）</CCell>
              </>}
              <CCell>{group}</CCell>
              <CCell colSpan={2}>{o?.d}</CCell>
              <CCell colSpan={2}>{o?.m}</CCell>
              <CCell colSpan={2}>{o?.c}</CCell>
              {0===r && <>
                <CCell rowSpan={3}>{orc.回转表r}</CCell>
              </>}
            </TableRow>;
          }) }
          <TableRow>
            <CCell>5</CCell>
            <CCell>C4.9.7.1风速（m/s）</CCell>
            <CCell>1次</CCell>
            <CCell colSpan={2}>{orc.监风速?.d}</CCell>
            <CCell colSpan={2}>{orc.监风速?.m}</CCell>
            <CCell colSpan={2}>/</CCell>
            <CCell>{orc.监风速?.r}</CCell>
          </TableRow>
          <TableRow>
            <CCell>备注</CCell>
            <Cell colSpan={9}>{ multilines2Html(orc.监控备注,  (txt,i)=>{
              return <React.Fragment key={i}>{(i!==0)&&<br/>}<Text>{txt}</Text></React.Fragment>
            } ) }</Cell>
          </TableRow>
        </DirectLink>
      </TableBody>
    </Table>
    { children }
  </>;
};

